package leetcode_161_180;

public class trailingZeroes_172 {
    public int trailingZeroes(int n) {
        /**
         * 思路很简单
         * 然后发现当测试用例是30时，long都无法使用，数据溢出
         */
        long num=1;
        while(n!=0){
            num*=n;
            n--;
        }
        int count=0;
        while(num%10==0){
            count++;
            num/=10;
        }
        return count;
    }


    public int trailingZeroes2(int n) {
        /**
         * 换种思路
         * 计算能出现结尾0的数字有多少个
         * 10的整数倍，每出现一次，贡献一个0
         * 5和所有偶数，每出现一对，贡献一个0
         * 观察规律，每5个数贡献1个0
         * 于是 return n/5;
         * 未能通过测试
         * 查看高解分析，才恍然大悟
         * 其实我想的已经很接近了
         * 每出现一个5，就可以与一个偶数对应，为结果贡献一个0
         * 5不只是直接出现，还可以是隐藏在因子内
         * 如25，就是2个5；125，就是3个5
         */
        int count = 0;
        while (n > 0) {
            count += n / 5;
            n = n / 5;
        }
        return count;
    }
}
